package com.bestcem.xm.user.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.user.service.dto.PageResponseDTO;
import com.bestcem.xm.user.service.dto.user.OrganizationQuotainfoDTO;
import com.bestcem.xm.user.service.dto.user.QuotaConsumptionDTO;
import com.bestcem.xm.user.service.dto.user.QuotaInfoQueryDTO;
import com.bestcem.xm.user.service.dto.user.QuotaReachedDTO;

import java.util.List;

/**
 * 公司限额统计
 *
 * @author jishuo.yan <jishuo.yan@idiaoyan.com>
 * @version v1.0
 * @date 2022/3/21 14:12
 */
public interface OrganizationQuotainfoService {

    /**
     * 根据查询条件获取公司限额信息
     *
     * @param quotaInfoQueryDTO
     * @return OrganizationQuotainfoDTO 公司限额信息
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/03/24 17:30
     */
    ServiceResult<PageResponseDTO<OrganizationQuotainfoDTO>> listPageByQuotaInfo(QuotaInfoQueryDTO quotaInfoQueryDTO);

    /**
     * 根据orgId获取公司限额分页信息
     *
     * @param orgId
     * @return OrganizationQuotainfoDTO 公司限额信息
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/03/24 17:30
     */
    ServiceResult<PageResponseDTO<OrganizationQuotainfoDTO>> listPageByOrgId(String orgId, Integer page, Integer size);

    /**
     * 根据orgId获取公司限额信息
     *
     * @param orgId 公司id
     * @return com.bestcem.xm.util.ServiceResult<com.bestcem.xm.user.service.dto.user.OrganizationQuotainfoDTO>
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/03/24 17:30
     */
    ServiceResult<OrganizationQuotainfoDTO> getByOrgId(String orgId);

    /**
     * 公司限额数增加
     *
     * @param quotaConsumptionDTO
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/05/06 14:19
     */
    ServiceResult<Void> updateQuotaConsumption(QuotaConsumptionDTO quotaConsumptionDTO);

    /**
     * 创建公司限额信息
     *
     * @param organizationQuotainfoDTO 公司限额信息
     * @return Integer
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/05/11 17:57
     */
    ServiceResult<String> insertSelective(OrganizationQuotainfoDTO organizationQuotainfoDTO);

    /**
     * 更新公司限额信息
     *
     * @param organizationQuotainfoDTO 公司限额信息
     * @return ServiceResult<Integer>
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/05/12 11:57
     */
    ServiceResult<Integer> updateByPrimaryKeySelective(OrganizationQuotainfoDTO organizationQuotainfoDTO);

    /**
     * 根据条件获取公司限额信息
     *
     * @param organizationQuotainfoDTO 公司限额信息
     * @return ServiceResult<List < OrganizationQuotainfoDTO>>
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/05/12 11:57
     */
    ServiceResult<List<OrganizationQuotainfoDTO>> selectBySelective(OrganizationQuotainfoDTO organizationQuotainfoDTO);

    /**
     * 监听 公司达到限额通知用户MQ
     *
     * @param quotaReachedDTO
     * @return void
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/6/2 13:50
     */
    ServiceResult<Boolean> notifyQuotaReachedToUser(QuotaReachedDTO quotaReachedDTO);
}
